// 用户中心主模块 - 整合所有功能模块
import { bindTabSwitching } from './tab-manager.js';
import { bindPointsTaskListeners } from './points-task-manager.js';
import { initializeEditProfileModal } from './profile-editor.js';
import { initializeAvatarManager } from './avatar-manager.js';
import { showTopNotification } from './notification-manager.js';

// 使用全局函数（由 core.js 提供）
const { getUserInfo, setUserInfo, removeUserInfo, logout } = window;

/**
 * 初始化用户中心页面
 */
export function initializeUserCenter() {
    // 确保用户已登录
    const user = getUserInfo();
    if (!user) {
        // 用户未登录，重定向到登录页面
        window.location.href = 'login.html';
        return;
    }

    // 兼容性处理：为旧用户数据添加缺失的字段
    if (!user.registerDate) {
        user.registerDate = new Date().toISOString();
        setUserInfo(user);
    }
    if (!user.lastLogin) {
        user.lastLogin = new Date().toISOString();
        setUserInfo(user);
    }

    // 更新登录时间显示
    updateLoginTimeDisplay(user);
    
    // 初始化各个功能模块
    bindTabSwitching();
    bindPointsTaskListeners();
    initializeEditProfileModal();
    initializeAvatarManager();
    
    // 绑定全局事件监听器
    bindGlobalEventListeners();
    
    // 初始化页面显示
    updateProfileData(user);
}

/**
 * 更新登录时间显示
 * @param {Object} user 用户信息
 */
function updateLoginTimeDisplay(user) {
    const lastLoginEl = document.getElementById('profile-last-login');
    if (lastLoginEl && user.lastLogin) {
        const loginDate = new Date(user.lastLogin);
        
        // 格式化登录时间
        const now = new Date();
        const diffMs = now - loginDate;
        const diffMins = Math.floor(diffMs / 60000);
        const diffHours = Math.floor(diffMs / 3600000);
        const diffDays = Math.floor(diffMs / 86400000);
        
        let timeDisplay = '';
        if (diffMins < 1) {
            timeDisplay = '刚刚';
        } else if (diffMins < 60) {
            timeDisplay = `${diffMins}分钟前`;
        } else if (diffHours < 24) {
            timeDisplay = `${diffHours}小时前`;
        } else if (diffDays < 7) {
            timeDisplay = `${diffDays}天前`;
        } else {
            // 格式化日期
            const year = loginDate.getFullYear();
            const month = String(loginDate.getMonth() + 1).padStart(2, '0');
            const day = String(loginDate.getDate()).padStart(2, '0');
            timeDisplay = `${year}-${month}-${day}`;
        }
        
        lastLoginEl.textContent = timeDisplay;
    }
}

/**
 * 更新个人资料数据
 * @param {Object} user 用户信息
 */
function updateProfileData(user) {
    // 更新用户名和昵称
    const profileUserTitle = document.getElementById('profile-user-title');
    const profileUsername = document.getElementById('profile-username');
    
    if (profileUserTitle) {
        profileUserTitle.textContent = user.nickname || '用户头衔';
    }
    
    if (profileUsername) {
        profileUsername.textContent = user.username || '小镇名称';
    }
    
    // 更新用户头像
    const avatarImg = document.getElementById('avatar-img');
    if (avatarImg) {
        avatarImg.src = user.avatar || 'default-avatar.svg';
    }
    
    const userAvatars = document.querySelectorAll('.user-avatar img');
    userAvatars.forEach(avatar => {
        avatar.src = user.avatar || 'default-avatar.svg';
    });
    
    // 更新用户积分
    const userPointsEl = document.getElementById('profile-points');
    if (userPointsEl) {
        userPointsEl.textContent = user.points || 0;
    }
    
    // 更新游戏天数
    const gameDaysEl = document.getElementById('profile-game-days');
    if (gameDaysEl && user.registerDate) {
        try {
            const regDate = new Date(user.registerDate);
            const now = new Date();
            const diffMs = now - regDate;
            const diffDays = Math.floor(diffMs / 86400000);
            gameDaysEl.textContent = diffDays >= 0 ? diffDays : 0;
        } catch (e) {
            console.error('计算游戏天数失败:', e);
            gameDaysEl.textContent = 0;
        }
    }
    
    // 更新详细资料
    updateDetailProfile(user);
}

/**
 * 更新详细资料页面
 * @param {Object} user 用户信息
 */
function updateDetailProfile(user) {
    const detailUserId = document.getElementById('detail-user-id');
    const detailEmail = document.getElementById('detail-email');
    const detailBio = document.getElementById('detail-bio');
    const registerTime = document.getElementById('profile-register-date');
    const detailUsername = document.getElementById('detail-username');
    const detailUserTitle = document.getElementById('detail-user-title');
    
    // 显示用户ID
    if (detailUserId) {
        detailUserId.textContent = user.id || '未设置';
    }
    
    // 显示邮箱
    if (detailEmail) {
        detailEmail.textContent = user.email || '未设置';
    }
    
    // 显示个人简介
    if (detailBio) {
        detailBio.textContent = user.bio || '暂无个人简介';
    }
    
    // 显示小镇名称
    if (detailUsername) {
        detailUsername.textContent = user.username || '小镇名称';
    }
    
    // 显示用户名称
    if (detailUserTitle) {
        detailUserTitle.textContent = user.nickname || '用户名称';
    }
    
    if (registerTime && user.registerDate) {
        const regDate = new Date(user.registerDate);
        const year = regDate.getFullYear();
        const month = String(regDate.getMonth() + 1).padStart(2, '0');
        const day = String(regDate.getDate()).padStart(2, '0');
        registerTime.textContent = `${year}-${month}-${day}`;
    } else if (registerTime) {
        registerTime.textContent = '未知';
    }
}

/**
 * 绑定全局事件监听器
 */
function bindGlobalEventListeners() {
    // 退出登录功能 - 移动端
    const mobileLogoutBtn = document.getElementById('mobile-logout-btn');
    if (mobileLogoutBtn) {
        mobileLogoutBtn.addEventListener('click', handleLogout);
    }
    
    // 退出登录功能 - PC端
    const desktopLogoutBtn = document.getElementById('logout-btn');
    if (desktopLogoutBtn) {
        desktopLogoutBtn.addEventListener('click', handleLogout);
    }
    
    // 数据导出功能
    bindDataExportListeners();
    
    // 移动端菜单切换
    const menuToggle = document.getElementById('mobile-menu-btn');
    const mobileMenu = document.getElementById('mobile-menu');
    
    if (menuToggle && mobileMenu) {
        menuToggle.addEventListener('click', function() {
            mobileMenu.classList.toggle('hidden');
            // 切换图标
            const icon = this.querySelector('i');
            if (icon) {
                if (icon.classList.contains('fa-bars')) {
                    icon.classList.remove('fa-bars');
                    icon.classList.add('fa-times');
                } else {
                    icon.classList.remove('fa-times');
                    icon.classList.add('fa-bars');
                }
            }
        });
    }
    
    // 底部导航栏切换
    const bottomNavItems = document.querySelectorAll('.bottom-nav-item');
    bottomNavItems.forEach(item => {
        item.addEventListener('click', function() {
            // 移除所有激活状态
            bottomNavItems.forEach(navItem => {
                navItem.classList.remove('text-primary');
                navItem.classList.add('text-gray-500');
            });
            
            // 添加当前项激活状态
            this.classList.remove('text-gray-500');
            this.classList.add('text-primary');
            
            // 导航到对应页面
            const page = this.getAttribute('data-page');
            if (page) {
                window.location.href = page;
            }
        });
    });
    
    // 高亮当前页面的底部导航
    const currentPath = window.location.pathname;
    bottomNavItems.forEach(item => {
        const pagePath = item.getAttribute('data-page');
        if (pagePath && currentPath.includes(pagePath)) {
            item.classList.remove('text-gray-500');
            item.classList.add('text-primary');
        }
    });
}

/**
 * 处理退出登录
 */
function handleLogout() {
    // 确认退出
    if (confirm('确定要退出登录吗？')) {
        // 显示退出成功通知
        showTopNotification('退出登录成功', 'success');
        
        // 使用统一的logout函数
        setTimeout(() => {
            logout();
        }, 500);
    }
}

/**
 * 绑定数据导出相关的事件监听器
 */
function bindDataExportListeners() {
    // 导出JSON按钮
    const exportJsonBtn = document.getElementById('export-json-btn');
    if (exportJsonBtn) {
        exportJsonBtn.addEventListener('click', exportUserDataAsJson);
    }
    
    // 查看数据按钮
    const viewDataBtn = document.getElementById('view-data-btn');
    if (viewDataBtn) {
        viewDataBtn.addEventListener('click', openDataViewModal);
    }
    
    // 关闭数据查看模态框
    const closeDataModalBtn = document.getElementById('close-data-modal');
    const closeDataModalBtn2 = document.getElementById('close-data-modal-btn');
    if (closeDataModalBtn) {
        closeDataModalBtn.addEventListener('click', closeDataViewModal);
    }
    if (closeDataModalBtn2) {
        closeDataModalBtn2.addEventListener('click', closeDataViewModal);
    }
    
    // 模态框内的导出按钮
    const dataModalExportBtn = document.getElementById('data-modal-export-btn');
    if (dataModalExportBtn) {
        dataModalExportBtn.addEventListener('click', exportUserDataAsJson);
    }
}

/**
 * 导出用户数据为JSON文件
 */
function exportUserDataAsJson() {
    try {
        // 获取用户数据
        const userData = getUserInfo();
        if (!userData) {
            showTopNotification('没有找到用户数据', 'error');
            return;
        }
        
        // 创建完整的数据对象，包括所有localStorage中的相关数据
        const allUserData = {
            userInfo: userData,
            timestamp: new Date().toISOString(),
            appVersion: '1.0.0',
            // 可以根据需要添加更多相关数据
        };
        
        // 转换为格式化的JSON字符串
        const jsonStr = JSON.stringify(allUserData, null, 2);
        
        // 创建Blob对象
        const blob = new Blob([jsonStr], { type: 'application/json' });
        
        // 创建下载链接
        const url = URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = url;
        link.download = `user-data-${new Date().toISOString().split('T')[0]}.json`;
        
        // 触发下载
        document.body.appendChild(link);
        link.click();
        
        // 清理
        setTimeout(() => {
            document.body.removeChild(link);
            URL.revokeObjectURL(url);
        }, 100);
        
        // 显示成功通知
        showTopNotification('用户数据导出成功', 'success');
        
    } catch (error) {
        console.error('导出用户数据失败:', error);
        showTopNotification('数据导出失败，请重试', 'error');
    }
}

/**
 * 打开数据查看模态框
 */
function openDataViewModal() {
    try {
        // 获取用户数据
        const userData = getUserInfo();
        if (!userData) {
            showTopNotification('没有找到用户数据', 'error');
            return;
        }
        
        // 创建完整的数据对象
        const allUserData = {
            userInfo: userData,
            timestamp: new Date().toISOString(),
            appVersion: '1.0.0',
        };
        
        // 格式化并显示数据
        const jsonStr = JSON.stringify(allUserData, null, 2);
        const dataDisplay = document.getElementById('user-data-display');
        if (dataDisplay) {
            dataDisplay.textContent = jsonStr;
        }
        
        // 显示模态框
        const dataViewModal = document.getElementById('data-view-modal');
        if (dataViewModal) {
            dataViewModal.classList.remove('hidden');
        }
        
    } catch (error) {
        console.error('显示用户数据失败:', error);
        showTopNotification('数据加载失败，请重试', 'error');
    }
}

/**
 * 关闭数据查看模态框
 */
function closeDataViewModal() {
    const dataViewModal = document.getElementById('data-view-modal');
    if (dataViewModal) {
        dataViewModal.classList.add('hidden');
    }
}

// 导出其他可能需要暴露的方法
export { handleLogout, exportUserDataAsJson };